package com.kater.business;

import com.kater.fruit.Fruit;
import com.kater.promotion.Promotion;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

// 顾客类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Customer {
    private String name;
    private ShoppingCart shoppingCart;

    public Customer(String name) {
        this.name = name;
        this.shoppingCart = new ShoppingCart();
    }

    /**
     * 将指定数量的水果添加到购物车中。
     * @param fruit 要添加到购物车的水果对象，不能为空。
     * @param quantity 要添加的水果数量，必须为非负数。
     */
    public void addToCart(Fruit fruit, int quantity) {
        if (fruit == null || quantity <= 0) {
            throw new IllegalArgumentException("参数非法");
        }
        shoppingCart.addFruit(fruit, quantity);
    }

    /**
     * 实现结账功能。
     * @return 返回购物车中所有商品的总价格。
     */
    public double checkout() {
        // 如果购物车为空，则返回0
        if (shoppingCart == null) {
            return 0;
        }
        // 调用购物车的calculateTotalPrice方法计算总价格
        return shoppingCart.calculateTotalPrice();
    }


    /**
     * 设置促销活动
     * @param promotion 促销活动对象，包含了具体的促销规则和优惠信息。
     *                  通过传入不同的促销活动对象，可以实现不同的优惠策略。
     */
    public void setPromotion(Promotion promotion) {
        shoppingCart.setPromotion(promotion);
    }
}